package c15IO;

import java.io.File;
import java.util.*;

import c12Swing.TestJFileChooser;

/**
 * 打印项目目录结构
 *
 * @author ywlPC
 */
public class PrintProj {

	/**
	 * 打印文件夹目录结构
	 *
	 * @param file 文件夹
	 */
	public static void printDirsLevel(File file) {
		for (File temp = file.getParentFile(); temp.getParentFile() != null; temp = temp.getParentFile()) {
			System.err.print("|");
		}
		if (file.isDirectory()) {
			System.err.print("+");
		} else {
			System.err.print("-");
		}
		System.err.print(" ");
		System.err.println(file.getName());

		File[] fs = file.listFiles();
		if (fs != null && fs.length != 0) {
			fs = sortFiles(fs);
			for (File f : fs) {
				printDirsLevel(f);
			}
		}

	}

	/**
	 * 将文件按照文件夹->文件、文件名顺序排列
	 *
	 * @param fs 文件数组
	 * @return 排列后的文件数组
	 */
	private static File[] sortFiles(File[] fs) {
		List<File> listDirs = new ArrayList<File>();
		List<File> listFiles = new ArrayList<File>();
		for (File f : fs) {
			if (f.isDirectory()) {
				listDirs.add(f);
			} else {
				listFiles.add(f);
			}
		}
		//文件夹和文件分别排序
		Collections.sort(listDirs);
		Collections.sort(listFiles);
		//文件加在文件夹后面
		listDirs.addAll(listFiles);
		return listDirs.toArray(fs);
	}

	/**
	 * 打印文件夹目录结构
	 *
	 * @param file 文件夹
	 */
	public static void printDirsLevel0(File file) {
		File temp = file;
		if (file.isDirectory()) {
			for (; temp.getParentFile() != null; temp = temp.getParentFile()) {
				System.err.print(" ");
			}
			System.err.print("+");
		} else {
			for (temp = temp.getParentFile(); temp.getParentFile() != null; temp = temp.getParentFile()) {
				System.err.print(" ");
			}
			System.err.print("|");
			System.err.print("-");
		}
		System.err.print(" ");
		System.err.println(file.getName());

		File[] fs = file.listFiles();
		if (fs != null && fs.length != 0) {
			for (File f : fs) {
				printDirsLevel(f);
			}
		}

	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
//		printFile(TestJFileChooser.chooseFile());
		printDirsLevel(new File("F:\\workSpace_UAP-STUDIO\\TestNC633_元数据向导\\"));
	}

}
